Technical Q&A QA1249
How can I find out what non-RGB pixel formats a codec supports?


Q: ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁÉRÅ[ÉfÉbÉNÇ…ñ‚Ç¢çáÇÌÇπÇǵǃÅAǪÇÃÉRÅ[ÉfÉbÉNÇ™ÉTÉ|Å[ÉgÇ∑ÇÈîÒ RGB ÉsÉNÉZÉãå`éÆÇí≤Ç◊ÇÈï˚ñ@ÇÕdžÇËÇ‹Ç∑Ç©ÅH

A: îÒ RGB ÉsÉNÉZÉãå`éÆÇÉTÉ|Å[ÉgÇ∑ÇÈÉRÅ[ÉfÉbÉNÇ…ÇÕÅAǪÇÃÉpÉuÉäÉbÉNÉäÉ\Å[ÉXÉäÉXÉgÇ…ÅAîÒ RGB ÉsÉNÉZÉãå`éÆÇà 4 ï∂éöÇÃÉRÅ[ÉhÇäiî[Ç∑ÇÈ 'cpix' ÇΔǢǧÉäÉ\Å[ÉXÇ™ä‹Ç‹ÇÍǃǢNjÇ∑ÅBDZÇÃèÓïÒÇÕÅAGetComponentPublicResource ÇégǡǃÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ…ÇÊǡǃéÊìæÇ≈Ç´Ç‹Ç∑ÅB

ÉäÉXÉg 1 Ç…ÅAÉRÅ[ÉfÉbÉNÇ™ì¡íËÇÃîÒ RGB ÉsÉNÉZÉãå`éÆÇÉTÉ|Å[ÉgÇ∑ÇÈǩǫǧǩÇÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈í≤Ç◊ÇÈï˚ñ@Çé¶ÇµÇ‹Ç∑ÅB

ÉäÉXÉg 1.

Boolean DoesCodecSupportPixelFormat(Component inComponent,
                                    OSType    inFormat)
{
  Boolean   isSupported = false;

  OSTypePtr *hResource = NULL;
  long      thePixelFormatCount;
  int       i;
  OSErr     err;

  // íçãLÅF GetComponentPublicResource ÇÕÅAÉäÉ\Å[ÉXÇ≈ÇÕÇ»Ç≠ÅA
  // ÉnÉìÉhÉãÇï‘Ç∑ÅBåƒÇ—èoǵë§ÇÕÅADisposeHandle Çégǡǃ
  // DZÇÃÉnÉìÉhÉãÇîjä¸Ç∑ÇÈïKóvǙdžÇÈ
  err = GetComponentPublicResource(inComponent,
                                   'cpix', 1,
                                   (Handle*)&hResource);
  if (err || (NULL == hResource)) goto bail;

  thePixelFormatCount = GetHandleSize((Handle)hResource)/4);

  for (i = 0; i < thePixelFormatCount && !isSupported; i++)
    isSupported = ((*hResource)[i] == inFormat);

  DisposeHandle((Handle)hResource);

bail:
  return isSupported;
}

ÉRÅ[ÉfÉbÉNÉfÉxÉçÉbÉpÅF

'2vuy'ÅA'r408'ÅA'v408' Ç…ëŒÇ∑ÇÈÉRÅ[ÉfÉbÉNÇÃÉAÉhÉoÉ^ÉCÉWÉìÉOÉTÉ|Å[ÉgÇÕÅAÇΩÇΔǶnjÅAê} 1 Ç…é¶Ç∑ÇÊǧDžÅAÉpÉuÉäÉbÉNÉäÉ\Å[ÉXÉäÉXÉgÇÃàÍïîÇ… 'cpix' ÉäÉ\Å[ÉXÇä‹ÇÒÇ≈ǢNjÇ∑ÅB

ê} 1.

resource 'cpix' (kMyCPIXResID) {
 {
     '2vuy','r408','v408'
 }
};

êÊì™Ç…ñflÇÈ

éQçléëóøÅF


[2004 îN 1 åé 5 ì˙]